﻿using System;
using System.Timers;

    public class Clock
{
    // 定时器，用于模拟时钟的滴答声  
    private System.Timers.Timer _timer;

    // 闹钟触发的时间  
    private DateTime _alarmTime;

    // 定义Tick事件  
    public event EventHandler Tick;

    // 定义Alarm事件  
    public event EventHandler Alarm;
    public Clock(int interval)
    {
        _timer = new System.Timers.Timer(interval);
        _timer.Elapsed += OnTimedEvent;
        _timer.AutoReset = true;
        _timer.Enabled = true;
    }

    // 设置闹钟时间  
    public void SetAlarm(DateTime alarmTime)
    {
        _alarmTime = alarmTime;
    }

    // 定时器触发的事件处理器  
    private void OnTimedEvent(Object source, ElapsedEventArgs e)
    {
        // 触发Tick事件  
        Tick?.Invoke(this, EventArgs.Empty);

        // 检查是否到了闹钟时间  
        if (DateTime.Now >= _alarmTime)
        {
            // 触发Alarm事件  
            Alarm?.Invoke(this, EventArgs.Empty);
            // 停止定时器，避免重复触发Alarm事件  
            _timer.Stop();
        }
    }

    // 触发Tick事件的辅助方法  
    protected virtual void OnTick()
    {
        Tick?.Invoke(this, EventArgs.Empty);
    }

    // 触发Alarm事件的辅助方法  
    protected virtual void OnAlarm()
    {
        Alarm?.Invoke(this, EventArgs.Empty);
    }

}
class Program
{
    static void Main(string[] args)
    {
        // 创建一个每秒触发一次的闹钟  
        Clock clock = new Clock(1000);

        // 订阅Tick事件  
        clock.Tick += (sender, e) =>
        {
            Console.WriteLine("Tick: " + DateTime.Now.ToString("HH:mm:ss"));
        };

        // 订阅Alarm事件  
        clock.Alarm += (sender, e) =>
        {
            Console.WriteLine("Alarm! Wake up!");
        };

        // 设置闹钟时间为5秒后（仅为示例）  
        clock.SetAlarm(DateTime.Now.AddSeconds(5));

        // 保持程序运行，等待事件触发  
        Console.WriteLine("Waiting for the alarm...");
        Console.ReadLine();
    }
}
